/**
 * 日期格式化
 * @param {string|Date} date - 要格式化的日期
 * @param {string} fmt - 格式模板，例如：'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, fmt = 'YYYY-MM-DD') {
  if (!date) return ''
  
  // 如果是数字或字符串，转为Date对象
  if (typeof date === 'string' || typeof date === 'number') {
    date = new Date(date)
  }
  
  if (!(date instanceof Date) || isNaN(date.getTime())) {
    return ''
  }
  
  const formatMap = {
    'Y+': date.getFullYear(), // 年
    'M+': date.getMonth() + 1, // 月
    'D+': date.getDate(), // 日
    'H+': date.getHours(), // 时
    'h+': date.getHours() % 12 || 12, // 12小时制
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds() // 毫秒
  }
  
  // 替换年份
  if (/(Y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substring(4 - RegExp.$1.length))
  }
  
  // 替换其他日期部分
  for (let key in formatMap) {
    if (new RegExp('(' + key + ')').test(fmt)) {
      const value = formatMap[key] + ''
      fmt = fmt.replace(
        RegExp.$1, 
        RegExp.$1.length === 1 ? value : ('00' + value).substring(value.length)
      )
    }
  }
  
  return fmt
}

/**
 * 获取相对时间描述（如：刚刚、5分钟前、1小时前、昨天等）
 * @param {string|Date} date - 日期
 * @param {boolean} short - 是否使用短格式
 * @returns {string} 相对时间描述
 */
export function getRelativeTime(date, short = false) {
  if (!date) return ''
  
  // 如果是数字或字符串，转为Date对象
  if (typeof date === 'string' || typeof date === 'number') {
    date = new Date(date)
  }
  
  if (!(date instanceof Date) || isNaN(date.getTime())) {
    return ''
  }
  
  const now = new Date()
  const diff = now.getTime() - date.getTime()
  
  const minute = 60 * 1000
  const hour = 60 * minute
  const day = 24 * hour
  const week = 7 * day
  const month = 30 * day
  const year = 365 * day
  
  // 刚刚
  if (diff < minute) {
    return '刚刚'
  }
  
  // 分钟前
  if (diff < hour) {
    const minutes = Math.floor(diff / minute)
    return `${minutes}${short ? '分' : '分钟前'}`
  }
  
  // 小时前
  if (diff < day) {
    const hours = Math.floor(diff / hour)
    return `${hours}${short ? '时' : '小时前'}`
  }
  
  // 天前（7天内）
  if (diff < week) {
    const days = Math.floor(diff / day)
    if (days === 1) {
      return '昨天'
    }
    return `${days}${short ? '天' : '天前'}`
  }
  
  // 周前（4周内）
  if (diff < month) {
    const weeks = Math.floor(diff / week)
    return `${weeks}${short ? '周' : '周前'}`
  }
  
  // 月前（12个月内）
  if (diff < year) {
    const months = Math.floor(diff / month)
    return `${months}${short ? '月' : '个月前'}`
  }
  
  // 年前
  const years = Math.floor(diff / year)
  return `${years}${short ? '年' : '年前'}`
} 